const { Controller } = require('egg');

class JobController extends Controller {
  // 获取职位列表
  async index() {
    const { ctx } = this;
    const { page = 1, pageSize = 10, ...query } = ctx.query;
    const result = await ctx.service.job.list({
      page: parseInt(page),
      pageSize: parseInt(pageSize),
      ...query,
    });
    ctx.body = {
      code: 0,
      data: result,
      msg: '获取职位列表成功',
    };
  }

  // 获取单个职位详情
  async show() {
    const { ctx } = this;
    const { id } = ctx.params;
    const job = await ctx.service.job.findById(id);
    if (!job) {
      ctx.body = {
        code: 1,
        data: null,
        msg: '职位不存在',
      };
      return;
    }
    ctx.body = {
      code: 0,
      data: job,
      msg: '获取职位详情成功',
    };
  }

  // 创建职位（重点修改）
  async create() {
    const { ctx } = this;
    const jobData = ctx.request.body;

    // 基础参数校验（移除 publisher_id 校验，改为从中间件获取）
    if (!jobData.title) {
      ctx.body = { code: 1, msg: '职位标题（title）不能为空' };
      return;
    }
    if (!jobData.company) {
      ctx.body = { code: 1, msg: '公司名称（company）不能为空' };
      return;
    }

    try {
      // 从中间件获取当前登录用户ID，作为发布者ID（防止伪造）
      const token = ctx.request.header.admintoken;
      const decode = ctx.app.jwt.verify(token, ctx.app.config.jwt.secret);
      const publisherId = decode.admin_id;
      if (!publisherId) {
        ctx.body = { code: 1, msg: '登录状态异常，请重新登录' };
        return;
      }

      // 调用服务创建职位（强制设置 publisher_id）
      const job = await ctx.service.job.create({
        ...jobData,
        publisher_id: publisherId, // 覆盖客户端传入的 publisher_id
      });
      ctx.body = { code: 0, data: job, msg: '职位创建成功' };
    } catch (error) {
      ctx.body = { code: 1, msg: `创建失败：${error.message}` };
    }
  }


  // 更新职位（优化错误提示）
  async update() {
    const { ctx } = this;
    const { id } = ctx.params;
    const updateData = ctx.request.body;

    try {
      const job = await ctx.service.job.update(id, updateData);
      if (!job) {
        // 服务层已区分错误，此处直接返回
        ctx.body = { code: 1, data: null, msg: '职位不存在或无权限更新' };
        return;
      }
      ctx.body = { code: 0, data: job, msg: '更新职位成功' };
    } catch (error) {
      ctx.body = { code: 1, msg: error.message || '更新失败' };
    }
  }


  // 删除职位
  async destroy() {
    const { ctx } = this;
    const { id } = ctx.params;
    const result = await ctx.service.job.destroy(id);
    if (!result) {
      ctx.body = {
        code: 1,
        data: null,
        msg: '职位不存在或无权限删除',
      };
      return;
    }
    ctx.body = {
      code: 0,
      data: null,
      msg: '删除职位成功',
    };
  }

  // 申请职位（确认用户ID来源）
  async apply() {
    const { ctx } = this;
    const { id } = ctx.params;
    const { resume_id } = ctx.request.body;

    // 从中间件获取当前登录用户ID
    const userId = ctx.state.user_id;
    if (!userId) {
      ctx.body = { code: 1, msg: '请先登录' };
      return;
    }

    try {
      const result = await ctx.service.job.apply({
        job_id: id,
        user_id: userId, // 使用中间件的 user_id
        resume_id,
      });
      ctx.body = { code: 0, data: result, msg: '职位申请成功' };
    } catch (error) {
      ctx.body = { code: 1, msg: error.message || '申请失败' };
    }
  }
}

module.exports = JobController;